package com.luoyx.hauyne.admin.sys.response;

import com.luoyx.hauyne.admin.sys.enums.GenderEnum;
import com.luoyx.hauyne.validation.constraint.EnumCheck;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.PastOrPresent;
import java.time.LocalDate;
import java.util.List;

/**
 * 已新增的用户信息
 *
 * @author Alan.Luo
 */
@Data
public class CreatedUserVO {

    /**
     * 用户id
     */
    @ApiModelProperty("用户id")
    private Long id;

    /**
     * 用户名
     */
    @ApiModelProperty("用户名")
    private String username;

    /**
     * 是否已启用（true= 已启用，false= 未启用）
     */
    @ApiModelProperty("是否已启用（true= 已启用，false= 未启用）")
    private Boolean enabled;

    /**
     * 用户资料
     */
    @ApiModelProperty("用户资料")
    private UserProfileVO profile;

    @Data
    public static class UserProfileVO {

        /**
         * 用户真实姓名
         */
        @ApiModelProperty("用户真实姓名")
        @Length(max = 50, message = "用户真实姓名长度不能超过50")
        private String realName;

        /**
         * 昵称
         */
        @ApiModelProperty("昵称")
        @Length(max = 50, message = "昵称长度不能超过50")
        private String nickname;

        /**
         * 头像
         */
        @ApiModelProperty("头像")
        @Length(max = 255, message = "头像长度不能超过255")
        private String avatar;

        /**
         * 性别
         */
        @ApiModelProperty("性别")
        @EnumCheck(enumClazz = GenderEnum.class, getterMethod = "getValue")
        private Integer gender;

        /**
         * 出生日期
         */
        @ApiModelProperty("出生日期")
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        @PastOrPresent(message = "出生日期不能是未来时间")
        private LocalDate birthday;

        /**
         * 手机号
         */
        @ApiModelProperty("手机号")
        @Length(max = 50, message = "手机号长度不能超过50")
        private String phone;

        /**
         * 电子邮箱
         */
        @ApiModelProperty("电子邮箱")
        @Length(max = 50, message = "电子邮箱长度不能超过50")
        private String email;

        /**
         * 职位
         */
        @ApiModelProperty("职位")
        @Length(max = 50, message = "职位长度不能超过50")
        private String position;

        /**
         * 备注
         */
        @ApiModelProperty("备注")
        @Length(max = 255, message = "备注长度不能超过255")
        private String remark;
    }

    /**
     * 角色列表
     */
    @ApiModelProperty("角色列表")
    private List<String> roleNames;
}
